OpenswanでVPN接続してIPSec通信をやってみた。
はじめに
くどうです
今回は、VPN(Virtual Private Network)について投稿します。
AWSではオンプレとVPNを利用し接続する場合、VPCで用意されているVPNを利用するか、マーケットプレイスで用意されているvyatta、OpenVPN、Sophosなどのソフトウェアルータを利用するのが一般的だと思います。
他にも、DirectConnectが用意されていますが専用線のためコスト面など簡単に導入できないのが実情です。
そこで、簡単に導入が可能なVPNがOpenswanを紹介します。
https://www.openswan.org/
今回の投稿の背景として、VPCで用意されているVPNやvyattaが利用しできなかったことがあります。
マーケットプレイスにvyattaなどのイメージは利用できますが下記のような問題に直面しOpenswanを検証しました。
10拠点を超える多拠点で接続する
VPCで用意されているVPNの制限は1VPCあたり10拠点までの接続制限がある。
詳細は下記のURLよりご確認ください。
Amazon VPC 制限
VPNのランニングコスト
VPCで用意されているVPNについてはランニングコストが発生します。
一時間当たり約0.05 USD。
約5円換算で
24時間=5x24=120円
1か月30日=120x30=3,600円
1年365日=120x365=43,800円
これに加え拠点が増えるとその分の掛け算となり
10拠点だとした場合43,800x10=438,000となります。
また、標準的な AWS データ転送料も発生し、場合によってはコストが増大することも考えられます。
詳しい費用については下記のURLよりご確認ください。
VPN 接続料金表
vyattaとYAMAHAのRTXと相性が悪い。
vyattaと接続が簡単ではない(接続はできるが面倒である)。
IPSecで接続する場合、IPSec Over IPIPでの接続が必要である。
vyattaについてはCore Editionの開発が終了しているため今後のサポートを考えると問題があります。
http://ja.wikipedia.org/wiki/Vyatta
他のマーケットプレイスのソフトウェアルータでも相性が悪い。
SophosやOpenVPNでも検証を行ったが接続を行えなかった。
検証不足かもしれませんがあしからず。
以上、10拠点以上の接続をYAMAHA RTXを行った場合の問題に直面しました。
Openswanで多拠点接続の不安定さなど不確定要素の部分は考慮していません。
また、拠点数が少ない場合は、安定性などを考慮した場合、VPCで用意されているVPNを利用することをお勧めします。
ネットワーク構成図
Openswanの準備
AWS側に用意するAMIはAmazon Linuxを用意しましょう。
Ubuntu、CentOSなどでも動作可能です。
[Bash]
# yum update
# yum install openswan
[/Bash]
secretsファイルの変更を行います。pre-shared-keyは任意に設定してください。
[Bash]
# vi /etc/ipsec.secrets
[/Bash]
[Bash]
include /etc/ipsec.d/*.secrets
: PSK "xxxxxxxxxxxxxxxx"
[/Bash]
最初に設定を行います。
[Bash]
# vi /etc/ipsec.conf
[/Bash]
[Bash]
version 2.0
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
oe=off
protostack=auto
include /etc/ipsec.d/*.conf
[/Bash]
対向のルータRTX810に接続する情報はvpnxx.confとしてipsec.dディレクトリに保存します。
[Bash]
# vi /etc/ipsec.d/vpnxx.conf
[/Bash]
[Bash]
conn vpn01
auto=start
type=tunnel
aggrmode=no
authby=secret
keyexchange=ike
ike=aes128-sha1;modp1024
phase2=esp
phase2alg=aes128-sha1;modp1024
pfs=no
compress=no
ikelifetime=8h
salifetime=8h
#AWS Config left=(インスタンスのプライベートIPアドレス[xxx.xxx.xxx.xxx]) leftsubnet=(VPCのネットワークアドレス[xxx.xxx.xxx.xxx/xx]) leftid=(EIP[xxx.xxx.xxx.xxx])
#Internal Config
right=(オンプレのグローバルIPアドレス[xxx.xxx.xxx.xxx])
rightsubnet=(オンプレのネットワークアドレス[xxx.xxx.xxx.xxx/xx])
rightid=(オンプレのLAN側IPアドレス[xxx.xxx.xxx.xxx])
[/Bash]
IPフォーワードのおまじない。
[Bash]
# echo 1 >/proc/sys/net/ipv4/ip_forward
[/Bash]
以下は再起動後も設定が反映されるよう設定します。
networkファイルに設定します。
[Bash]
# vim /etc/sysconfig/network
[/Bash]
以下を追記します。
[Bash]
FORWARD_IPV4=yes
[/Bash]
sysctl.confへ設定します
[Bash]
# vim /etc/sysctl.conf
[/Bash]
以下に変更します。
[Bash]
net.ipv4.ip_forward = 1
[/Bash]
OpenswanインスタンスのSource/Destination CheckをDisableにします。
つぎに、VPCのRoute TableにオンプレのネットワークアドレスをOpenswanインスタンスに向けに登録します。
また、セキュリティグループにはオンプレのネットワークアドレスも追加しましょう。
以上でOpenswan側に設定は完了です。
YAHAMA RTX810の準備
トンネルの準備を行います。トンネルIDなどは環境に応じて変更してください。
[Bash]
ip route (VPCのネットワークアドレス) gateway tunnel 1
tunnel select 1
tunnel encapsulation ipsec
ipsec tunnel 1001
ipsec sa policy 1001 1 esp aes-cbc sha-hmac
ipsec ike encryption 1 aes-cbc
ipsec ike group 1 modp1024
ipsec ike hash 1 sha
ipsec ike local address 1 (オンプレのLAN側IPアドレス[xxx.xxx.xxx.xxx])
ipsec ike local id 1 (オンプレのLAN側IPアドレス[xxx.xxx.xxx.xxx])
ipsec ike pre-shared-key 1 text xxxxxxxxxxxxxxxx
ipsec ike remote address 1 (EIP[xxx.xxx.xxx.xxx])
ipsec ike remote id 1 (EIP[xxx.xxx.xxx.xxx])
ipsec auto refresh 1 on
tunnel enable 1
[/Bash]
saveは忘れずに。
接続確認
Openswanを起動しましょう。
[Bash]
# /etc/init.d/ipsec start
# /etc/init.d/ipsec status
IPsec running - pluto pid: xxxxx
pluto pid xxxxx
1 tunnels up
some eroutes exist
# chkconfig ipsec on
[/Bash]
pingをオンプレに打ってみましょう。
レスポンスがあれば成功です。
ついで、tcpdumpでパケットを確認してみましょう。
以下はpingのパケットになります。
[Bash]
IP インスタンスのプライベートIPアドレス > オンプレのグローバルIPアドレス: ESP(spi=0x0706f373,seq=0x6), length 132
IP オンプレのグローバルIPアドレス > インスタンスのプライベートIPアドレス: ESP(spi=0x8f98d71d,seq=0x1b), length 132
[/Bash]
IPSecでデータ転送に使われるESPパケットがが確認できれば成功です。
まとめ
今回はVPNの設定を行ってみました。
ただし、運用には気を付けましょう。IPSecは複合化暗号化にリソースを使います。そのため、データ転送量や拠点数によってスケールアップ、スケールアウトが必要になるかもしれません。
また、YAHAMAに限らずCISCOなどでもIPSec接続は可能だと思います。
これで、オンプレとAWSへの道が開けるかもかも・・・